<?php
include_once "../funciones/class_carrito_orden.php";
include_once "filtro_cabecera.php";
include_once "../funciones/funciones_php.php";

//Incluye menu principal
require_once "menu_operacion.php";

//Recibe variables del formulario y las ingresa al carrito
if( isset($_POST['Ingresar'], $_POST['totalEnvio']) )
{
   //Rescata valores del formulario
   foreach ($_POST as $indice => $valor)
   {
      $_SESSION['form_carga'][$indice] =  strtoupper(trim($valor));
   }
     
   $f = $_SESSION['form_carga'];
     
   if( isset($_POST['totalCaja'], $_POST['recargoCaja'], $_POST['subtotalCaja']) )
   {
          
          $totalCaja = $_POST['totalCaja'];
          $recargoCaja = $_POST['recargoCaja'];
          $subtotalCaja = $_POST['subtotalCaja'];
         // echo $_POST['totalCaja'] . $_POST['recargoCaja'] . $_POST['subtotalCaja'];  
     
     
   }
   else
   {
     
          $subtotalCaja = 0;
          $totalCaja = 0;
          $recargoCaja = 0;
         
   }
     
   if( isset($_POST['totalSobre'], $_POST['recargoSobre'], $_POST['subtotalSobre']) )
   {
          
          $subtotalSobre = $_POST['subtotalSobre'];
          $totalSobre = $_POST['totalSobre'];
          $recargoSobre = $_POST['recargoSobre'];
     
   }
   else
   {
          
      $subtotalSobre = 0;
      $totalSobre = 0;
      $recargoSobre = 0;
     
   }
     
   if(isset($_POST['totalValija'], $_POST['recargoValija'], $_POST['subtotalValija']))
   {
     
      $subtotalValija = $_POST['subtotalValija'];
      $totalValija = $_POST['totalValija'];
      $recargoValija = $_POST['recargoValija'];
     
   }
   else
   {
          
      $subtotalValija = 0;
      $totalValija = 0;
      $recargoValija = 0;
     
   }
     
     
     /********************************
      *
      * Valida datos de formulario
      *
      ********************************/
   if(validaInt($totalCaja) === false) die("Debe ingresar numeros correctos");
   if(validaInt($subtotalCaja) === false) die("Debe ingresar numeros correctos");
   if(validaFloat($recargoCaja) === false) die("Debe ingresar numeros correctos");
     
    
   //Si hay cajas, calcula su volumen
   if($f['caja'] > 0)
   {
          $volumen = redondearDosDecimal(($f['largo_caja'] * $f['ancho_caja'] * $f['alto_caja']) / 4000);
   }
   else
   {
          $f['caja'] = 0;
   }
    
    
   
   //Valida si es viable el tipo de envio con las encomiendas seleccionadas
   if(validaTipoEnvio($f['caja'], $f['sobre'], $f['valija'], 0, $f['id_destino'], $f['id_tarifa_cliente'], $f['tipo_envio']))
   {
          
           /***************************************************
          *
          *         Proceso de calculo de tarifa
          *
          ***************************************************/
          
          
          //Suma totales
          $subtotal = $subtotalCaja + $subtotalValija + $subtotalSobre;
          $total = $totalCaja + $totalValija + $totalSobre;
      
             
    
          /****************************************************
           *
           * Proceso de ingreso de la orden a la base de datos
           *
           *
           *****************************************************/
          $conexion = conectar();
          //Comienza la transaccion del ingreso de la orden de flete
          pg_query("BEGIN")or die("Error al comenzar la transaccion");
    
          /**
          *
          *   PROCESO DE INGRESO DE COMPROBANTE
          *
          */
    
          //Comprueba si el comprobante existe
          $sql = sprintf("SELECT id_comprobante FROM comprobante WHERE id_comprobante = '%s'",
                         pg_escape_string($f['num_comprobante']));
          $consulta = pg_query($sql)or die("error en la consulta");
          $numFilas = pg_num_rows($consulta);
     
          
          if($numFilas == 0) //si el comprobante no existe, lo ingresa
          {
               //Ingreso de comprobante a la BD
               $sql = sprintf("INSERT INTO comprobante (id_comprobante, id_cliente, fecha_emision)
                     VALUES ('%s','%s','%s')", pg_escape_string($f['num_comprobante']),
                     pg_escape_string($f['id_remitente']), pg_escape_string($f['fecha']));
               $consulta = pg_query($sql)or die("Error al ingresar comprobante");
            
          }
          else //Si el comprobante existe, comprueba que el cliente sea el mismo
          { 
          
               die("Comprobante ya fue ingresado.");
          }
            
            
            
          /******************************************
          *                                        *
          *  Proceso de ingreso de orden de envio  *
          *                                        *
          *******************************************/
            
          //Crea la consulta, para insertar la orden
          $sql = sprintf("INSERT INTO orden_flete (id_cliente,id_cliente_departamento, fecha_emision, id_estado_orden, enviado_por, rut_consignatario, nombre_consignatario,
                         apellido_consignatario, telefono_consignatario, direccion_consignatario, numero_direccion, numero_depto, id_comuna,
                         contacto_consignatario, correo_consignatario, id_tipo_envio, instrucciones_especiales, id_comprobante,
                         id_empleado_retiro, id_tipo_pago, id_tipo_servicio, subtotal, total, recargo_caja, recargo_sobre, recargo_valija, id_comuna_origen,id_cliente_facturacion)
                         VALUES ('%s', '%s', now(), '3', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', 3, 1, '%d', '%d', '%f', '%f', '%f', '%s' , '%s') RETURNING id_orden_flete",
                         pg_escape_string($f['id_remitente']),
                         pg_escape_string($f['id_departamento']),
                         pg_escape_string($f['nombre_remitente']),
                         pg_escape_string($f['rut_remitente']),
                         pg_escape_string($f['nombre_consignatario']),
                         pg_escape_string($f['apellido_consignatario']),
                         pg_escape_string($f['telefono_consignatario']),
                         pg_escape_string($f['direccion_consignatario']),
                         pg_escape_string($f['numero_direccion_consignatario']),
                         pg_escape_string($f['depto_consignatario']),
                         pg_escape_string($f['id_comuna_consignatario']),
                         pg_escape_string($f['contacto_consignatario']),
                         pg_escape_string($f['correo_consignatario']),
                         pg_escape_string($f['tipo_envio']),
                         pg_escape_string($f['instruccionesEsp']),
                         pg_escape_string($f['num_comprobante']),
                         pg_escape_string($f['chofer']),
                         pg_escape_string($subtotal),
                         pg_escape_string($total),
                         pg_escape_string($recargoCaja),
                         pg_escape_string($recargoSobre),
                         pg_escape_string($recargoValija),
                         pg_escape_string($f['id_comuna_origen']),
                         pg_escape_string($f['id_remitente']));
            
          //hace la consulta,para ingresar la orden
          $consulta = pg_query($sql)or die("Error en la consulta");
          //Obtiene el id de autoincrement
          $id_fila = pg_fetch_row($consulta);
          $idOrden = $id_fila[0];
            
          //Deja la orden de flete en finiquitada
          $sql = sprintf("INSERT INTO orden_flete_estado_orden (id_orden_flete,id_estado_orden,fecha,id_observacion)
                         VALUES ('%s' , '1' , now() , '1')",pg_escape_string($idOrden));
                         pg_query($sql)or die("Error en la consulta");
          
          $sql = sprintf("INSERT INTO orden_flete_estado_orden (id_orden_flete,id_estado_orden,fecha,id_observacion)
                         VALUES ('%s' , '2' , now() , '1')",pg_escape_string($idOrden));
                         pg_query($sql)or die("Error en la consulta");
          
          $sql = sprintf("INSERT INTO orden_flete_estado_orden (id_orden_flete,id_estado_orden,fecha,id_observacion)
                         VALUES ('%s' , '3' , now() , '1')",pg_escape_string($idOrden));
                         pg_query($sql)or die("Error en la consulta");
    
    
    
    
          /***********************************************
          *                                             *
          *  Proceso de ingreso de encomienda           *
          *                                             *
          ***********************************************/
                 
            
          //Inserta Cajas, si es que hay
          if(!empty($f['caja']) && $f['caja'] > 0)
          {
               
               //inserta las cajas en la tabla encomienda
               $sql = sprintf("INSERT INTO encomienda (id_orden_flete, cantidad, id_tipo_encomienda, peso, volumen, num_factura, tipo_pago)
                               VALUES ('%d', '%d' , '1', '%f', '%f', '', '') RETURNING id_encomienda",
                               pg_escape_string($idOrden),
                               pg_escape_string($f['caja']),
                               pg_escape_string($f['peso_caja']),
                               pg_escape_string($volumen));
                        
               //Ingresa las cajas
               $consulta = pg_query($sql)or die("Error al ingresar cajas");
                
               //Obtiene el id que se le asigno a la encomienda
               $id_encomienda = pg_fetch_array($consulta);
         
               //inserta cada encomienda en la tabla detalle encomienda
               for($j = 1 ; $j <= $f['caja'] ; $j++ )
               {
                    //Crea el codigo de barra
                    $codigo_barra = $idOrden."S1S".$j;
                    //consulta para ingresar la identificacion del sobre
                    $sql = sprintf("INSERT INTO detalle_encomienda (id_encomienda, codigo_barra, estado_llegada, estado_finiquito, fecha_llegada, fecha_finiquito)
                                   VALUES ( '%d', '%s', '1', '1', now(), now() )",
                                   pg_escape_string($id_encomienda['id_encomienda']),pg_escape_string($codigo_barra));
                    $consulta = pg_query($sql) or die("Error al identificar las cajas");
               }
          }
            
          //Ingresa Sobres, si es que hay
          if(!empty($f['sobre']) && $f['sobre'] > 0)
          {
        
               //Crea la consulta
               $sql = sprintf("INSERT INTO encomienda (id_orden_flete, cantidad, id_tipo_encomienda, peso, volumen, num_factura, tipo_pago)  
                              VALUES ('%d', '%d', '2', 0, 0, '', '') RETURNING id_encomienda",
                              pg_escape_string($idOrden),
                              pg_escape_string($f['sobre']));
                
               //Ingresa los sobres
               $consulta = pg_query($sql)or die("Error en la consulta");
               
               //Obtiene el id con que se ingreso la encomienda
               $id_encomienda = pg_fetch_array($consulta);
                
               //identifica cada sobre con su codigo
               for($j = 1 ; $j <= $f['sobre'] ; $j++ )
               {
                    //Crea el codigo de barra
                    $codigo_barra = $idOrden."S2S".$j;
                    //consulta para ingresar la identificacion del sobre
                    $sql = sprintf("INSERT INTO detalle_encomienda (id_encomienda, codigo_barra, estado_llegada, estado_finiquito, fecha_llegada, fecha_finiquito)
                                VALUES ( '%d', '%s', '1', '1', now(), now() )",
                                pg_escape_string($id_encomienda['id_encomienda']),
                                pg_escape_string($codigo_barra));
                    $consulta = pg_query($sql) or die("Error al identificar los sobres");
               }
          }
     
            
     
          //Ingresa Valijas, si es que hay
          if(!empty($f['valija']) && $f['valija'] > 0)
          {
            
               //Crea la consulta
               $sql = sprintf("INSERT INTO encomienda (id_orden_flete, cantidad, id_tipo_encomienda, peso, volumen, num_factura, tipo_pago)
                          VALUES ('%d', '%d', '3', '%f', 0, '', '')RETURNING id_encomienda",
                         pg_escape_string($idOrden),
                         pg_escape_string($f['valija']),
                         pg_escape_string($f['peso_valija']));
               
               //Ingresa valijas
               $consulta = pg_query($sql)or die("Error en la consulta");
               
               //Obtiene el id con que se ingreso la encomienda
               $id_encomienda = pg_fetch_array($consulta);
                             
                              
               //identifica cada sobre con su codigo
               for($j = 1 ; $j <= $f['valija'] ; $j++ )
               {
                              
                    //Crea el codigo de barra
                    $codigo_barra = $idOrden."S3S".$j;
                              
                    //consulta para ingresar la identificacion del sobre
                    $sql = sprintf("INSERT INTO detalle_encomienda (id_encomienda, codigo_barra, estado_llegada, estado_finiquito, fecha_llegada, fecha_finiquito)
                         VALUES ( '%d', '%s', '1', '1', now(), now() )",
                         pg_escape_string($id_encomienda['id_encomienda']),
                         pg_escape_string($codigo_barra));
                         
                    $consulta = pg_query($sql) or die("Error al identificar las valijas");
                         
               }
          }
            
   }
        
    
    
   //Termina la transaccion
   if(pg_query("COMMIT"))
   {
          
      pg_close($conexion);
      unset($_SESSION['form_carga']);
      $url = "getEtiquetaCarga.php?idOrdenEnvio=" . $idOrden;
      phpAlertDialog( "Orden de flete se genero correctamente.<br /> Para imprimir comprobante y etiqueta presione el boton 'Aceptar'. ", "Atencion", $url);  
         
     
   }
   else
   {
      phpAlertDialog("Hubo un problema en ingresar la orden", "Error", "crear_orden_flete_carga.php" );
   }
    
}
else
{
    phpAlertDialog ("Error", "Error", "crear_orden_flete_carga.php" );
}

?>